﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ControlsLib;
using GestionePolveriLib.BL;
using GestionePolveriLib.Facades;

namespace GestionePolveri2
{
    public partial class AnagraficaOperatori : AnagraficaoperatoriBase
    {
        private List<Ruolo> m_ruoli = null;

        public AnagraficaOperatori()
        {
            InitializeComponent();
        }

        public override void InitializeForm()
        {
            base.InitializeForm();

            if (!this.DesignMode)
            {
                this.ShowPanelMessage = false;
                this.CanModify = true;
                this.ButtonClicked += new EventHandler<CustomEventArgs<Operatore>>(AnagraficaOperatori_ButtonClicked);
                this.ItemSelected += new EventHandler<CustomEventArgs<Operatore>>(AnagraficaOperatori_ItemSelected);

                LoadRuoli(false);

                LoadOperatori(false);
            }
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            base.SetupDataGridEvents();
        }

        private void LoadRuoli(bool p)
        {
            RuoliFacade rf = new RuoliFacade();
 
            foreach (Ruolo r in rf.GetRuoli())
            {
                this.checkedListBox1.Items.Add(r.Descrizione);
            }
        }

        void descrizioneComboBox_SelectedIndexChanged(object sender, EventArgs e)
        {
            //m_ruolo = this.comboBox1.SelectedItem as Ruolo;
        }

        private void LoadOperatori(bool selectLast)
        {
            OperatoriFacade pf = new OperatoriFacade();

            this.Datasource = pf.GetOperatori();

            SetGridItemSelected(0);
        }

        void AnagraficaOperatori_ButtonClicked(object sender, CustomEventArgs<Operatore> e)
        {
            switch (e.Action)
            {
                case Actions.New:
                    this.userNameTextBox.Clear();
                    this.passwordTextBox.Clear();

                    UncheckItems();
                    break;
                case Actions.Add:
                    {
                        if (this.checkedListBox1.CheckedItems.Count == 0)
                        {
                            MessageBox.Show("Indicare almeno un Ruolo !");
                        }
                        else
                        {
                            m_ruoli = new List<Ruolo>();
                            foreach (object obj in this.checkedListBox1.CheckedItems)
                            {
                                m_ruoli.Add(new Ruolo() { Descrizione = (string)obj });
                            }

                            OperatoriFacade pf = new OperatoriFacade();
                            bool ret = pf.AddOperatore(this.userNameTextBox.Text, this.passwordTextBox.Text, m_ruoli);

                            if (ret) MessageBox.Show("Operatore Aggiunto");
                             else MessageBox.Show(string.Format("Si è verificato un errore: {0}", pf.LastErrorMotivation));

                            LoadOperatori(true);
                        }
                    }
                    break;
                case Actions.Modify:
                    break;
                case Actions.Delete:
                    {
                        OperatoriFacade pf = new OperatoriFacade();
                        bool ret = pf.DeleteOperatore(this.userNameTextBox.Text);

                        if (ret) MessageBox.Show("Operatore Eliminato");

                        LoadOperatori(true);
                    }
                    break;
                default:
                    break;
            }
        }

        private void UncheckItems()
        {
            for (int i = 0; i < checkedListBox1.Items.Count; i++)
            {
                checkedListBox1.SetItemChecked(i, false);
            }
        }

        void AnagraficaOperatori_ItemSelected(object sender, CustomEventArgs<Operatore> e)
        {
            this.userNameTextBox.Text = e.Item.UserName;
            this.passwordTextBox.Text = e.Item.Password;

            UncheckItems();
            foreach (Ruolo r in e.Item.Ruolo)
            {
                int y = checkedListBox1.Items.IndexOf(r.Descrizione);
                this.checkedListBox1.SetItemChecked(y, true);
            }
        }

        private void btnResetPassword_Click(object sender, EventArgs e)
        {
            OperatoriFacade pf = new OperatoriFacade();
            if (pf.ResetPassword(this.txtNewPassword.Text, this.userNameTextBox.Text))
            {
                MessageBox.Show("Reset Password ok !");
            }
            else
            {
                MessageBox.Show("Reset Password non riuscito !");
            }
        }
    }

    public class AnagraficaoperatoriBase : AnagraficaManager<Operatore> { }
}
